package com.ato.MyCollection;

import java.util.ArrayList;

/**
 * @author wangjing
 * @create 2021--11--06--11:58
 *
 *  动态数组：可重复，有序的
 *   Arraylist LinkedList  Vector
 *
 *   异同：都是List接口的实现类，
 *   异：
 *   ArrayList ：    List接口的主要实现类 ： 用的多   线程不安全，效率高 底层使用的是 Object[]
 *                                              线程不安全解决：也不会用Vector 使用工具类 Collections里有一个synchronizedList(List<t> list)
 *       JDK:1.7
 *              和StringBuffer一样，有一个空参构造函数，调用了有参:参数为数组长度，StringBuffer默认是16  ArrayList是10
 *              然后add方法每次调用时看是不是超出默认的10 超出了就扩容，1.5倍 15个，
 *              建议开发中还是使用带参数的构造器
 *              new ArrayList(int capacity)
 *       jdk1.8
 *              new的时候不会新建数组，也没有默认长度，而是一个{} 当第一次add的时候判断然后赋值容量为10.在创建数组，在判断容量，如果不够就扩容
 *
 *   LinkedList :   底层使用的数双向链表存储，对于频繁的增加 插入 比ArrayList 好
 *   Vector：        List接口的古来实现类   线程安全，效率低  底层使用的是 Object[]
 */
public class ListTest {
    public static void main(String[] args) {

        ArrayList arrayList = new ArrayList();
        arrayList.add(123);
        arrayList.add(456);
        arrayList.add(new People("wangjin",18));
        arrayList.add(1,23);
        System.out.println("add(int index,Object o); 在指定索引位置上插入"+arrayList);
        ArrayList arrayList1 = new ArrayList();
        arrayList1.add("ArrayList1");
        boolean b = arrayList.addAll(1, arrayList1);
        System.out.println("arrayList.addAll(int index, Collection<? E> coll); 在指定位置在插入一个集合,返回boolean" + b);
        System.out.println("改变源：arrayList : "+arrayList);
        Object o = arrayList.get(1);
        System.out.println("arrayList.get(int index); 获取指定索引的元素：" + o);
        System.out.println("arrayList.indexOf(Object obj); 获取指定元素的索引，没有返回-1,有返回第一次出现的索引：" + arrayList.indexOf(456));
        System.out.println("arrayList.remove(Object obj) : 删除元素，注意元素如果为int，直接放入可能会报错，他会当成索引！！ 返回boolean   " + arrayList.remove(new Integer(456)));
        System.out.println(arrayList);
        System.out.println("arrayList.remove(int index) : 根据索引删除，返回被删除的这个元素，  " + arrayList.remove(1));
        System.out.println("arrayList.subList(int startIndex,int endIndex);从start开始截取， 截取到end 不包含end！" + arrayList.subList(1,2));

        Object setA = arrayList.set(1, "修改的");
        System.out.println("arrayList.set(int index ,  Object o ); 修改指定索引位置的元素");



    }
}
